package fr.miage.course7.app.model;

import java.util.GregorianCalendar;
/**
 * Modelise la transmission de la position d'un participant.
 * @author Gloria ARAOZ
 * @author Leticia HUETE
 * @author Mickael LAROCHE
 */
public class Transmission implements Comparable<Transmission> {

   /** Date de la transmission. */
    private GregorianCalendar date;
    /** Identifiant du participant ayant effectue la transmission. */
    private int idParticipant;
    /** Position du participant lors de sa transmission. */
    private Position coord;

    /**
     * Constructeur.
     * @param idP l'identifiant du participant ayant effectue la transmission
     * @param gregorianCal la date de la transmission
     * @param lat la latitude du participant au moment de la transmission
     * @param lon la longitude du participant au moment de la transmission
     */
    public Transmission(final int idP, final GregorianCalendar gregorianCal,
                        final int lat, final int lon) {
        idParticipant = idP;
        this.date = gregorianCal;
        coord = new Position(lat, lon);
    }

    /**
     * Retourne la date de la transmission.
     * @return la date (GregorianCalendar) de la transmission
     */
    public final GregorianCalendar getDate() {
        return date;
    }

    /**
     * Compare la transmission courante avec une autre.
     * Cette comparaison s'effectue selon la norme du compareTo
     * @param t transmission
     * @return l'entier -1, 0 ou 1 selon la norme du compareTo
     */
    public final int compareTo(final Transmission t) {
        if (idParticipant == t.idParticipant) {
            return date.compareTo(t.date);
        } else {
            if (idParticipant < t.idParticipant) {
                return -1;
            } else {
                return 1;
            }
        }
    }

    /**
     * Retourne la position.
     * @return la position de la transmission
     */
    public final Position getPosition() {
        return coord;
    }

    /**
     * Afficheur.
     * @return la classe sous forme de String
     */
    @Override
    public final String toString() {
        return getClass().getSimpleName() + '@'
                + Integer.toHexString(hashCode())
                + " [idParticipant=" + idParticipant
                + ", date="    + date.get(GregorianCalendar.DAY_OF_MONTH) + "/"
                + date.get(GregorianCalendar.MONTH) + "/"
                + date.get(GregorianCalendar.YEAR) + " "
                + date.get(GregorianCalendar.HOUR) + "h"
                + date.get(GregorianCalendar.MINUTE)
                + ", coord=(" + coord.getLat() + "," + coord.getLon() + ")]";
    }
}
